#pragma once

#include <iostream>
#include <string>
#include <vector>
#include <ctemplate/template.h>

#include "oj_model.hpp"

namespace oj_view
{
    const std::string template_html_path = "./template_html/";
    class View
    {
    public:
        void allQuestionsExpandHtml(const std::vector<oj_model::Question> &questions, std::string &html)
        {
            // 编号   题目     难度
            // 表格形式
            std::string src_path = template_html_path + "all_questions.html";
            ctemplate::TemplateDictionary root("all_questions"); // unordered_map<string,string> all_question;

            for (const auto &q : questions)
            {
                ctemplate::TemplateDictionary *sub = root.AddSectionDictionary("question_list");
                sub->SetValue("number", q.number);
                sub->SetValue("title", q.title);
                sub->SetValue("level", q.level);
            }

            // 获取渲染对象
            ctemplate::Template *tpl =
                ctemplate::Template::GetTemplate(src_path, ctemplate::DO_NOT_STRIP); // DO_NOT_STRIP：保持html网页原貌

            // 完成渲染功能
            // 将模板和字典中的数据进行合并，完成渲染操作
            tpl->Expand(&html, &root);
        }

        void onQuestionExpandHtml(const oj_model::Question &q, std::string &html)
        {
            std::string src_path = template_html_path + "one_question.html";
            ctemplate::TemplateDictionary root("one_question"); // unordered_map<string,string> all_question;

            root.SetValue("number", q.number);
            root.SetValue("title", q.title);
            root.SetValue("level", q.level);
            root.SetValue("pre_code", q.header);
            root.SetValue("desc", q.desc);

            // 获取渲染对象
            ctemplate::Template *tpl =
                ctemplate::Template::GetTemplate(src_path, ctemplate::DO_NOT_STRIP); // DO_NOT_STRIP：保持html网页原貌

            // 完成渲染功能
            // 将模板和字典中的数据进行合并，完成渲染操作
            tpl->Expand(&html, &root);
        }
    };
}